/*
 * listeFichiers.c
 *
 *  Created on: 3 mai 2010
 *      Author: reda
 */


#include "listeInfo.h"


void init_liste_info(ListeInfo *liste){

  liste->debut=NULL;
  liste->fin=NULL;
  liste->taille=0;
}

/*
 * copier la deuxieme variable dans la premiere
 */
void copier_info(Info *donnees1, Info *donnees2){
  donnees1->nomFichier=strdup(donnees2->nomFichier);
  donnees1->source=strdup(donnees2->source);
donnees1->dest=strdup(donnees2->dest);
  donnees1->tailleFichier = donnees2->tailleFichier;
  donnees1->nombreOctetsEnvoyes = donnees2->nombreOctetsEnvoyes;
}



int est_egale_info(Info donnees1, Info donnees2){

 if ((!strcmp(donnees1.nomFichier,donnees2.nomFichier))) {
	return 1;
} else {
	return 0;
}
}


void inserer_info(ListeInfo *liste, Info *donnees){

  EltListeInfo *nv;
  nv=malloc(sizeof(EltListeInfo));
  copier_info(&(nv->donnees),donnees);
  if(liste->taille==0){
    nv->precedent=liste->debut;
    nv->suivant=liste->fin;
    liste->debut=nv;
    liste->fin=nv;
    liste->taille++;}
  else{
  nv->precedent=NULL;
  nv->suivant=liste->debut;

  liste->debut->precedent=nv;
  liste->debut=nv;
  liste->taille++;

  }
}


void supprimer_info(ListeInfo *liste, Info donnees){

  EltListeInfo *elt;
  elt=malloc(sizeof(EltListeInfo));
  elt=liste->debut;
  while(elt!=NULL){

    if(est_egale_info(elt->donnees,donnees)){

      if(elt==liste->debut){

    	  liste->debut=elt->suivant;
    	  liste->taille--;
    	  if(liste->taille >1){
    		  elt->suivant->precedent=NULL;
    		  elt->suivant=NULL;
    	  }
      }

      else if(elt==liste->fin){

    	  liste->fin->precedent->suivant=NULL;
    	  liste->fin=liste->fin->precedent;
    	  liste->taille--;


      }
      else{

    	  elt->suivant->precedent=elt->precedent;
    	  elt->precedent->suivant=elt->suivant;
    	  liste->taille--;

      }

      break;

    }


    else
      elt=elt->suivant;



  }

}

void supprimer_liste_info(ListeInfo *l){

  if (l->taille!=0){
  EltListeInfo *elt;
  elt=malloc(sizeof(EltListeInfo));

  elt=l->debut;

  while(elt!=NULL){

    supprimer_info(l,elt->donnees);
    elt=l->debut;
     }

  }

}

void afficher_variable(Info * v){
  printf("Fichier : %s\n",v->nomFichier);
  printf("Telechargement de %s vers %s\n",v->source,v->dest);
  int avancement=100*v->nombreOctetsEnvoyes/v->tailleFichier;
  printf("Avancement : %d%%\n",avancement);
}

void afficher_liste_info(ListeInfo * l){
  if (l->taille!=0){
    EltListeInfo *elt;
    elt=malloc(sizeof(EltListeInfo));
    elt=l->debut;
    printf("\nFichiers en cours de transfert\n-------------------------------\n\n");
    while(elt!=l->fin){
      afficher_variable(&(elt->donnees));
      elt=elt->suivant;
      printf("\n");
    }
    afficher_variable(&(elt->donnees));
    printf("\n");
  }
  else printf("liste vide");
}
